// #include <stdio.h>
// #include <stdlib.h>
// #include <windows.h>
//
// typedef struct SqList {
//     int* data;
//     int length;
//     int maxsize;
// } SqList;
//
// void InitSq(SqList* L) {
//     L->data = NULL;
//     L->length = 0;
//     L->maxsize = 0;
// }
//
// void DestroySq(SqList* L) {
//     free(L->data);
//     L->data = NULL;
//     L->length = L->maxsize = 0;
// }
//
// void FullSq(SqList* L) {
//     if (L->length == L->maxsize) {
//         int newcapacity = (L->maxsize == 0 ? 4 : 2 * L->maxsize);
//         int* tmp = (int*)realloc(L->data, sizeof(int) * newcapacity);
//         if (tmp == NULL) {
//             exit(1);
//         }
//         L->data = tmp;
//         L->maxsize = newcapacity;
//     }
// }
//
// void QuickSort(SqList* L, int start, int end) {
//     // 添加递归终止条件
//     if (start >= end || L == NULL || L->data == NULL) {
//         return;
//     }
//
//     int left = start;
//     int right = end;
//     int pivot = L->data[left];  // 基准值
//
//     while (left < right) {
//         // 从右向左找小于基准的元素
//         while (left < right && L->data[right] >= pivot) {
//             right--;
//         }
//         if (left < right) {
//             L->data[left] = L->data[right];
//             left++;
//         }
//
//         // 从左向右找大于基准的元素
//         while (left < right && L->data[left] <= pivot) {
//             left++;
//         }
//         if (left < right) {
//             L->data[right] = L->data[left];
//             right--;
//         }
//     }
//
//     L->data[left] = pivot;  // 基准归位
//
//     // 递归排序子序列
//     QuickSort(L, start, left - 1);
//     QuickSort(L, left + 1, end);
// }
//
// int main() {
//     SqList list;
//     InitSq(&list);
//
//     // 添加测试数据
//     FullSq(&list);
//     list.data[0] = 3; list.data[1] = 1; list.data[2] = 4;
//     list.data[3] = 2; list.data[4] = 5;
//     list.length = 5;
//
//     printf("排序前: ");
//     for (int i = 0; i < list.length; i++) {
//         printf("%d ", list.data[i]);
//     }
//
//     QuickSort(&list, 0, list.length - 1);
//
//     printf("\n排序后: ");
//     for (int i = 0; i < list.length; i++) {
//         printf("%d ", list.data[i]);
//     }
//
//     DestroySq(&list);
//     return 0;
// }